package proxy_pattern.dynamic.ex1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @author 申书航
 * @version 1.0
 *
 * Client类用于演示动态代理的用法。
 */
public class Client {

    public static void main(String[] args) {
       // 创建UserDAO的实例并为其创建代理
       AbstractUserDAO ud = new UserDAO();
       InvocationHandler handler = new LogHandler(ud);
       AbstractUserDAO udProxy = (AbstractUserDAO) Proxy.newProxyInstance(
               AbstractUserDAO.class.getClassLoader(), new Class[]{AbstractUserDAO.class}, handler);
       udProxy.updateById(778);

       // 创建DocumentDAO的实例并为其创建代理
       AbstractDocumentDAO dd = new DocumentDAO();
       handler = new LogHandler(dd);
       AbstractDocumentDAO ddProxy = (AbstractDocumentDAO) Proxy.newProxyInstance(
               Proxy.class.getClassLoader(), new Class[]{AbstractDocumentDAO.class}, handler);
       ddProxy.deleteById(996);
    }
}

